#ifndef CHARACTER_H_
  #define CHARACTER_H_

#include "Steering.h"
#include "Behavior/Behavior.h"
#include "setBehavior.h"
#include "CEvent.h"
#include "Graph.h"
#include "State.h"

#include <SDL/SDL.h>
#include <vector>
#include <ctime>

class Behavior;
class Monitor;

using namespace std;

class Character:public CEvent {
  friend class Monitor;

  protected:
    vector<setBehavior*> behaviors;
    vector<Character*> *enemys;
    int Estado;
    SDL_Surface* surface;
    float width;
    float height;
    State *state;
    enum MEstado { WAITING, SEEK_PLAYER, CORRER , ATACO , ALEJAR_DEL_PLAYER } estado;
    /*Esta variable es utilizada para saber cuanto tiempo lleva desde el ultimo ataque a ver si puede realizar otro ataque*/
    Uint32 old_time;
    /*Esta variable es utilizada para saber cuanto tiempo lleva desde la ultima vez que recupero vida a ver si ya le toca recuperar vida*/
    Uint32 old_time_life;
  public:
    int life;
    int max_life;
    bool estaFrito;

    Kinematic*    k;
    vector<Node *>caminoObjetivo;
    Character(Kinematic* _k=NULL);
    virtual bool OnInit(Character* target=NULL);
    virtual void OnRender(SDL_Surface* display);
    virtual void OnLoop(long time);
    virtual void OnCleanup();
    Kinematic* getKinematic() const;
    Steering* getSteering() const;
    float getWidth() const;
    float getHeight() const;
    void alejarDelPlayer();
    void setKinematic(Kinematic*);
    void update(Steering* st, long time);
    void addSetBehavior(setBehavior* b);
    void updateTargetsData();
    void muevete();
    bool isDead() const;
    void atacado(Character* c=NULL);
    void processYells(Kinematic *k,bool pik);
    void changeToSeekPNow();
    void getFree();
    void pp();
    virtual void addLife(int add);
};

#endif
